/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package SYSGEST.br.Funcionario;

import SYSGEST.br.Login.Login;
import SYSGEST.br.fornecedor.Fornecedor;
import SYSGEST.conexao.Utill;
import java.util.List;
import javax.swing.JOptionPane;
import org.hibernate.Criteria;
import sysgest.conexao.HibernateUtil;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Order;
import org.hibernate.criterion.Restrictions;

/**
 *
 * @author AELSON
 */
public class FuncionarioDAO {

    private Session sessao;
    private Transaction transacao;

    public void salvar(Funcionario funcionario) {
        setSessao(HibernateUtil.getSessionFactory().openSession());
        setTransacao(getSessao().beginTransaction());
        getSessao().save(funcionario);
        getTransacao().commit();
        getSessao().close();
    }
    

    public void alterar(Funcionario funcionario) {
        setSessao(HibernateUtil.getSessionFactory().openSession());
        setTransacao(getSessao().beginTransaction());
        getSessao().update(funcionario);
        getTransacao().commit();
        getSessao().close();
    }

    public void excluir(Funcionario funcionario) {
        setSessao(HibernateUtil.getSessionFactory().openSession());
        setTransacao(getSessao().beginTransaction());
        getSessao().delete(funcionario);
        getTransacao().commit();
        getSessao().close();
    }

    public Funcionario pesquisaCPF(String cpf) {
        setSessao(HibernateUtil.getSessionFactory().openSession());
        setTransacao(getSessao().beginTransaction());
        Funcionario funcionario
                = (Funcionario) getSessao().createCriteria(Funcionario.class).add(Restrictions.eq("cpf", cpf))
                .uniqueResult();
        return funcionario;
    }

    public List<Funcionario> listar() {
        setSessao(HibernateUtil.getSessionFactory()
                .openSession());
        setTransacao(getSessao().beginTransaction());
        Criteria criteria = getSessao().createCriteria(Funcionario.class);
        List<Funcionario> funcionarios = criteria.list();
        return funcionarios;
    }

    public Funcionario pesquisacodigo(int Codigo) {
        setSessao(HibernateUtil.getSessionFactory().openSession());
        setTransacao(getSessao().beginTransaction());

        Funcionario funcionarios
                = (Funcionario) getSessao().createCriteria(Funcionario.class).
                add(Restrictions.eq("codigo", Codigo)).
                uniqueResult();
        getSessao().close();
        return funcionarios;

    }

    public List<Funcionario> pesquisarNome(String nome) {
        setSessao(HibernateUtil.getSessionFactory().openSession());
        setTransacao(getSessao().beginTransaction());
        Criteria criteria = getSessao().createCriteria(Funcionario.class);
        criteria.add(Restrictions.like("nome", nome, MatchMode.ANYWHERE));
        criteria.addOrder(Order.asc("nome"));
        List<Funcionario> funcionario = criteria.list();
        return funcionario;
    }

    public List<Funcionario> buscarCpf(String cpf) {
        setSessao(HibernateUtil.getSessionFactory().openSession());
        setTransacao(getSessao().beginTransaction());
        Criteria criteria = getSessao().createCriteria(Funcionario.class);
        criteria.add(Restrictions.like("cpf", cpf, MatchMode.ANYWHERE));
        criteria.addOrder(Order.asc("cpf"));
        List<Funcionario> funcionario = criteria.list();
        return funcionario;
    }
    
    public boolean autenticar(String login, String senha) {
        setSessao(HibernateUtil.getSessionFactory().openSession());
        Funcionario usuario = new Funcionario();
        senha = Utill.md5(senha);
        usuario = (Funcionario) getSessao().createCriteria(Funcionario.class).add(Restrictions.eq("Login", login))
                .add(Restrictions.eq("senha", senha)).uniqueResult();
        getSessao().close();
        if (usuario != null) {
            return true;
        } else {
            return false;
        }

    }

    /**
     * @return the sessao
     */
    public Session getSessao() {
        return sessao;
    }

    /**
     * @param sessao the sessao to set
     */
    public void setSessao(Session sessao) {
        this.sessao = sessao;
    }

    /**
     * @return the transacao
     */
    public Transaction getTransacao() {
        return transacao;
    }

    /**
     * @param transacao the transacao to set
     */
    public void setTransacao(Transaction transacao) {
        this.transacao = transacao;
    }

}
